//package com.stfalcon.chatkit.sample.utils;
//
//import android.util.Log;
//
//import java.math.BigInteger;
//
//public class Encryption {
//    /**
//     * SM4加解密封装
//     * @param data 传入参数
//     * @param flag 加密为1&解密为0
//     * @param key 16字节密钥
//     * @return 加解密结果
//     */
//    public static String deal(String data, int flag, byte[] key)
//    {
//        StringBuilder builder = new StringBuilder();
//        SM4 sm4 = SM4.getInstance();
//        String strData = "";
//        byte[] bInData;
//        byte[] bOutData = new byte[16];
//        int nIndex;
//        int nDataLen = data.length();
//        int nCount = 0;
//        int nLastLen = nDataLen%32;
//        if (nLastLen > 0) {
//            nCount = nDataLen/32 + 1;
//            if (flag ==0) {
//                Log.i("SM4", "数据长度不正确，需解密数据应是32的倍数");
//            }
//        } else {
//            nCount = nDataLen/32;
//        }
//        for (int i = 0; i < nCount; i++) {
//            if ((i+1) == nCount && nLastLen > 0) {
//                nIndex = i*32;
//                strData = data.substring(nIndex, nIndex+nLastLen);
//                strData = zero(strData);
//                bInData = hexStringToBytes(strData);
//                sm4.sms4(bInData,bInData.length,key,bOutData,flag);
//                strData = bytesToHexString(bOutData,0,16);
//                builder.append(strData);
//            } else {
//                nIndex = i*32;
//                strData = data.substring(nIndex, nIndex+32);
//                bInData = hexStringToBytes(strData);
//                sm4.sms4(bInData,bInData.length,key,bOutData,flag);
//                strData = bytesToHexString(bOutData,0,16);
//                builder.append(strData);
//            }
//        }
//        return builder.toString();
//    }
//
//    /**
//     * 补位方法，SM4 分块加密 ，每块16字节，此处不足补0. 扩展说明：有得规则是首字节补80，之后补00，还有区分左补和右补，如果此加解密不能满足要求，可以往这方面去做
//     * @param data 需补位的数据
//     * @return 补位后的字符串
//     */
//    public  static String zero(String data) {
//        StringBuilder builder = new StringBuilder();
//        builder.append(data);
//        int nLen = data.length();
//        while (nLen < 32) {
//            builder.append("0");
//            nLen++;
//        }
//        return builder.toString();
//    }
//
//    /**
//     *  hexString转byte[]数组
//     * @param str 字符串，原串为“112233”
//     * @return 转换后的数据， 转换后为 0x11,0x22,0x33
//     */
//    public static byte[] hexStringToBytes(String str) {
//        if (0 == str.length() || str.equals("")) {
//            return new byte[0];
//        }
//
//        final byte[] byteArray = new byte[str.length() >> 1];
//        int index = 0;
//        for (int i = 0; i < str.length(); i++) {
//            if (index  > str.length() - 1) {
//                return byteArray;
//            }
//            byte highDit = (byte) (Character.digit(str.charAt(index), 16) & 0xFF);
//            byte lowDit = (byte) (Character.digit(str.charAt(index + 1), 16) & 0xFF);
//            byteArray[i] = (byte) (highDit << 4 | lowDit);
//            index += 2;
//        }
//        return byteArray;
//    }
//
//    /**
//     * byte[]数组转hexString
//     * @param data 需转换的数组 0x11,0x22,0x33
//     * @param offset 需转换开始位置
//     * @param len 需转换长度
//     * @return 转换后的字符传为“112233”
//     */
//    public static String bytesToHexString(byte[] data, int offset, int len) {
//        StringBuilder sb = new StringBuilder();
//        for (int i = 0; i < len; i++)
//            sb.append(String.format("%02X", data[i + offset] & 0xff));
//        return sb.toString();
//    }
//
//}
